/* Copyright (c) 2011 Niall Sheridan * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.asplode.tumblr; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.StringBody; import org.apache.http.impl.client.DefaultHttpClient; public abstract class Post { public enum State { PUBLISH("published"), DRAFT("draft"), QUEUE("queue"); private String state; private State(String state) { this.state = state; } private String getState() { return state; } } private final String POST_URL = "http://www.tumblr.com/api/write"; MultipartEntity entity; private String email; private String password; public Post() { entity = new MultipartEntity(); } @SuppressWarnings("unused") private String convertToString(InputStream in) throws IOException { StringBuffer out = new StringBuffer(); byte[] b = new byte[4096]; for (int n; (n = in.read(b)) != -1;) { out.append(new String(b, 0, n)); } return out.toString(); } /** * @return HTTP status code * @throws NoCredentialsException * @throws ClientProtocolException * @throws IOException */ public int postToTumblr() throws NoCredentialsException, ClientProtocolException, IOException { if (email == null || password == null) { throw new NoCredentialsException(); } HttpClient httpclient = new DefaultHttpClient(); HttpPost request = new HttpPost(POST_URL); request.setEntity(entity); HttpResponse response = httpclient.execute(request); return response.getStatusLine().getStatusCode(); } /** * @param postId * The id of the post to be modified. * @return HTTP status code * @throws NoCredentialsException * @throws ClientProtocolException * @throws IOException */ public int postToTumblr(String postId) throws NoCredentialsException, ClientProtocolException, IOException { if (email == null || password == null) { throw new NoCredentialsException(); } entity.addPart("post-id", new StringBody(postId)); HttpClient httpclient = new DefaultHttpClient(); HttpPost request = new HttpPost(POST_URL); request.setEntity(entity); HttpResponse response = httpclient.execute(request); return response.getStatusLine().getStatusCode(); } /** * @param blog * The blog to post to. * @throws UnsupportedEncodingException */ public void setBlog(String blog) throws UnsupportedEncodingException { entity.addPart("group", new StringBody(blog)); } /** * @param email * Email address * @param password * Password * @throws UnsupportedEncodingException */ public void setCredentials(String email, String password) throws UnsupportedEncodingException { this.email = email; this.password = password; entity.addPart("email", new StringBody(email)); entity.addPart("password", new StringBody(password)); } /** * @param generator * A short description of the application making the request. Max * 64 characters. * @throws UnsupportedEncodingException */ public void setGenerator(String generator) throws UnsupportedEncodingException { entity.addPart("generator", new StringBody(generator)); } /** * @param state * True if the post should be private. False otherwise. * @throws UnsupportedEncodingException */ public void setPrivate(boolean state) throws UnsupportedEncodingException { if (state) entity.addPart("private", new StringBody("1")); } /** * @param date * Publish date and time for queued posts * @throws UnsupportedEncodingException */ public void setPublishOn(String date) throws UnsupportedEncodingException { entity.addPart("publish-on", new StringBody(date)); } /** * @param slug * Custom string to appear in the post's URL * @throws UnsupportedEncodingException */ public void setSlug(String slug) throws UnsupportedEncodingException { entity.addPart("slug", new StringBody(slug)); } /** * @param state * Post state. * @see State * @throws UnsupportedEncodingException */ public void setState(State state) throws UnsupportedEncodingException { entity.addPart("state", new StringBody(state.getState())); } /** * @param tags * Comma-separated list of post tags * @throws UnsupportedEncodingException */ public void setTags(String tags) throws UnsupportedEncodingException { entity.addPart("tags", new StringBody(tags)); } /** * @param twitter * One of the following values: <br> * "no" - Do not send post to twitter.<br> * "auto" - Send to Twitter with an automatically generated * summary of the post.<br> * Any other value - A custom message to send to Twitter for this * post. * @throws UnsupportedEncodingException */ public void setTwitter(String twitter) throws UnsupportedEncodingException { entity.addPart("send-to-twitter", new StringBody(twitter)); } }